package com.sky.mapper;

import com.sky.dto.GoodsSalesDTO;
import com.sky.entity.*;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;

@Mapper
public interface ReportMapper {
    /**
     * 查询营业额统计
     *
     * @param map
     * @return
     */
    Double turnoverStatistics(HashMap map);

    /**
     * 获取用户数列表
     *
     * @param newMap
     * @return
     */
    Integer countByMap(HashMap newMap);

    /**
     * 获取订单数量
     *
     * @param map
     * @return
     */
    Integer orderCount(HashMap map);

    /**
     * 获取商品销量前十
     *
     * @param beginTime
     * @param endTime
     * @return
     */
    List<GoodsSalesDTO> getSalesTop10(@Param("beginTime") LocalDateTime beginTime, @Param("endTime") LocalDateTime endTime);

    /**
     * 插入营业额报表
     *
     * @param turnoverReports
     */
    void insertTurnoverReport(@Param("turnoverReports") ArrayList<TurnoverReport> turnoverReports);

    /**
     * 插入用户报表
     *
     * @param userReports
     */
    void insertUserReport(@Param("userReports") Collection<UserReport> userReports);

    /**
     * 插入订单报表
     *
     * @param orderReports
     */
    void insertOrderReport(@Param("orderReports") ArrayList<OrderReport> orderReports);

    /**
     * 获取排行
     *
     * @param beginTime
     * @param endTime
     * @return
     */
    List<GoodsSalesDTO> getSalesTop(@Param("beginTime") LocalDateTime beginTime, @Param("endTime") LocalDateTime endTime);

    /**
     * 插入排行
     *
     * @param topReports
     */
    void insertTopReport(@Param("topReports") ArrayList<TopReport> topReports);

    /**
     * 清空数据
     */
    @Delete("delete from  turnover_report")
    void deleteTurnoverReport();

    /**
     * 清空数据
     */
    @Delete("delete from  user_report")
    void deleteUserReport();

    /**
     * 清空数据
     */
    @Delete("delete from  order_report")
    void deleteOrderReport();

    /**
     * 清空数据
     */
    @Delete("delete from  top_report")
    void deleteTopReport();


    /**
     * 获取区间所有数据
     *
     * @param beginTime
     * @param endTime
     * @return
     */

    List<TopReport> selectList(@Param("beginTime") LocalDate  beginTime, @Param("endTime") LocalDate endTime);

    /**
     * 获取对应的订单数量
     *
     * @param date
     * @return
     */
    OrderReport orderRepotrt(@Param("date") LocalDate date);

    /**
     * 获取有效的订单数量
     *
     * @return
     */
    @Select("select sum(validOrderCount) from order_report;")
    int validOrderCount();

    /**
     * 获取所有的订单数量
     *
     * @return
     */
    @Select("select sum(totalOrderCount) from order_report;")
    int totalOrderCount();

    /**
     * 获取对应的营业额
     *
     * @param date
     * @return
     */
    TurnoverReport turnoverReport(@Param("date") LocalDate date);

    /**
     * 统计用户数量
     *
     * @param date
     * @return
     */
    Integer countNewByMap(@Param("date") LocalDate date);

    /**
     * 总数量
     *
     * @param date
     * @return
     */
    Integer countTotalByMap(@Param("date") LocalDate date);

    /**
     * 批量导入
     *
     * @param dishArrayList
     */
    void insertBatch(@Param("dishArrayList") Collection<Dish> dishArrayList);

    /**
     * 获取所有营业额报表
     * @return
     */
    @Select("SELECT * FROM top_report")
    List<TopReport> getAllTopReport();
}
